import { CodeToText } from 'element-china-area-data'
/**
 * 格式化日期
 * @param {Date} date - Date对象
 * @param {String} [formatStr='Y-m-d'] - 需要输出的格式
 * @return {String} 格式化后的字符串
 * @example format(new Date()); //"2017-10-18 15:38:34"
 *          format(new Date(), 'Y年m月d日 星期N'); //"2017年10月18日 星期三"
 */
export function formatDate(date, formatStr = 'Y-m-d H:i:s') {
  if (typeof date === 'string') date = new Date(date)
  let str = ''
  for (const c of formatStr) {
    switch (c) {
      case 'Y': // 年，4位
        str += String(date.getFullYear()).padStart(4, '0')
        break
      case 'm': // 月，2位
        str += String(date.getMonth() + 1).padStart(2, '0')
        break
      case 'n': // 月，没有前导0
        str += date.getMonth() + 1
        break
      case 'd': // 日，2位
        str += String(date.getDate()).padStart(2, '0')
        break
      case 'j': // 日，没有前导0
        str += date.getDate()
        break
      case 'H': // 小时，4位
        str += String(date.getHours()).padStart(2, '0')
        break
      case 'i': // 分，2位
        str += String(date.getMinutes()).padStart(2, '0')
        break
      case 's': // 秒，2位
        str += String(date.getSeconds()).padStart(2, '0')
        break
      case 'N': // 星期中的第几天，汉字，日、一、二等，1位
        str += getUTCDayCN(date)
        break
      default:
        str += c
    }
  }
  return str
}
/**
 * 获取星期中的第几天
 * @param {Date} date - Date对象
 * @returns (String)日、一、二、...六
 */
export function getUTCDayCN(date) {
  switch (date.getUTCDay()) { // 0(周日)到6(周六)
    case 0:
      return '日'
    case 1:
      return '一'
    case 2:
      return '二'
    case 3:
      return '三'
    case 4:
      return '四'
    case 5:
      return '五'
    case 6:
      return '六'
  }
}

/**
 * @param {string} url
 * @returns {Object}
 */
export function param2Obj(url) {
  const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
  if (!search) {
    return {}
  }
  const obj = {}
  const searchArr = search.split('&')
  searchArr.forEach(v => {
    const index = v.indexOf('=')
    if (index !== -1) {
      const name = v.substring(0, index)
      const val = v.substring(index + 1, v.length)
      obj[name] = val
    }
  })
  return obj
}
/**
 * @param {any} data
 */
export function handleTypeof(data) {
  if (['string', 'number', 'undefined', 'boolean'].includes(typeof data)) {
    // 基本类型
    return typeof data
  } else if (typeof data === 'object') {
    // 引用类型
    return Object.prototype.toString.call(data).slice(8, -1)
  }
}
/**
 * @param {Array,string} code
 * @param {string} space
 */
export function getCityStr(code, space = ',') {
  // code 城市的code，
  // splicing 拼接符
  // space 字符串的分割符
  if (!code) return []
  let codeList = []
  if (typeof code === 'string') {
    codeList = code.split(space)
  } else if (Array.isArray(code)) {
    codeList = code
  }
  return codeList.map(item => {
    return CodeToText[item]
  })
}
